/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.lib.ddl.util; import java.util.*; import java.text.Format; import java.text.FieldPosition; import java.text.NumberFormat; import java.text.DateFormat; import java.text.ParsePosition; import java.text.ParseException; import org.openide.*; import org.openide.util.MapFormat; import org.netbeans.lib.ddl.*; /** * Command buffer used to execute a bunch of commands. Main advantages of using * buffer is: * - Optimized connection handling. Buffer opens JDBC connection before executing * of first command and closes it after a last one. It's safely then manually * handling connection and better then leaving commands open and close connection * for each comand separately. * - Exception handler. You can assign an exception handler to buffer. When any * error occures during the execution, this handler catches it and lets user to * decide if continue or not (when you're dropping nonexisting table, you probably * would like to continue). * - Debgging. You can set up debug mode and buffer will print each command to * System.out before execution. * * @author Slavek Psenicka */ public class CommandBuffer { /** Buffered items * @associates DDLCommand*/ Vector commands; /** Exception handler */ CommandBufferExceptionHandler handler; /** Debug mode */ boolean debugmode; /** Adds command to buffer * @param cmd Command to add. */ public void add(DDLCommand cmd) { if (commands == null) commands = new Vector(); commands.add(cmd); } /** Sets exception handler. * This handler will catch and alows user to solve all exception throwed during * the executing of buffered commands. */ public void setExceptionHandler(CommandBufferExceptionHandler hand) { handler = hand; } /** Returns true if debugging mode is on. * You can set up debug mode and buffer will print each command to * System.out before execution. */ public boolean isDebugMode() { return debugmode; } /** Sets debug mode on/off. * You can set up debug mode and buffer will print each command to * System.out before execution. * @param flag true = debugging enabled */ public void setDebugMode(boolean flag) { debugmode = flag; } /** Returns a string with string representation of all commands in buffer */ public String getCommands() throws DDLException { String cmds = ""; Enumeration cmd_e = commands.elements(); while (cmd_e.hasMoreElements()) { DDLCommand e_cmd = (DDLCommand)cmd_e.nextElement(); cmds = cmds + e_cmd.getCommand() + "\n"; } return cmds; } /** Executes commnds in buffer. * Buffer opens JDBC connection before executing (if isn't already open) * of first command and closes it after a last one. It's safely then manually * handling connection and better then leaving commands open and close connection * for each comand separately. You can also assign an exception handler to buffer. * When any error occures during the execution, this handler catches it and lets user to * decide if continue or not (when you're dropping nonexisting table, you probably * would like to continue). */ public void execute() throws DDLException { boolean opencon = false; DatabaseSpecification spec = null; Enumeration cmd_e = commands.elements(); while (cmd_e.hasMoreElements()) { DDLCommand e_cmd = (DDLCommand)cmd_e.nextElement(); try { if (spec == null) { spec = e_cmd.getSpecification(); if (spec.getJDBCConnection() == null) { opencon = true; spec.openJDBCConnection(); } } if (debugmode) System.out.println(e_cmd); e_cmd.execute(); } catch (Exception e) { // e.printStackTrace(); boolean exres = false; if (handler != null) exres = handler.shouldContinueAfterException(e); if (!exres) TopManager.getDefault().notify(new NotifyDescriptor.Message(e.getMessage(), NotifyDescriptor.ERROR_MESSAGE)); // throw new DDLException("command buffer fatal exception: "+e.getMessage()); } } if (opencon) spec.closeJDBCConnection(); } } /* * <<Log>> * 7 Gandalf 1.6 2/16/00 Radko Najman * 6 Gandalf 1.5 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 5 Gandalf 1.4 9/15/99 Slavek Psenicka * 4 Gandalf 1.3 9/10/99 Slavek Psenicka * 3 Gandalf 1.2 6/8/99 Ian Formanek ---- Package Change To * org.openide ---- * 2 Gandalf 1.1 4/23/99 Slavek Psenicka new version * 1 Gandalf 1.0 4/6/99 Slavek Psenicka * $ */